Data inlezen

De data komt uit een Kaggle competitie en gaat over het proces van claimafhandeling bij een grote verzekeringsmaatschappij. De opdracht van de competitie was om een model te bouwen dat binnenkomende claims kan categoriseren naar ‘snel afhandelbaar’ en ‘nadere controle nodig’. De oorspronkelijk dataset had een omvang van 110 MB (meer dan 100.000 regels). Voor een snellere laadtijd is de dataset met 60% gereduceerd (met behoud van verhoudingen).

firstDF <- read_csv("https://raw.githubusercontent.com/hanbedrijfskunde/im/master/workshops/bigdata/kaggle.csv")
head(firstDF)

Kwaliteit data set beoordelen

In bovenstaande tabel hebben we al een klein beetje gekeken naar de kwaliteit van de data. We zien dat er 133 kolommen zijn en bij iedere kolom is aangegeven om welk type data het gaat. De kolom met de variabele v1 is bijvoorbeeld van het type double (dbl) en dit geeft aan dat het om een getal met decimalen gaat. Kolom v3 bevat tekst (chr) en target natuurlijke getallen (telgetallen - int).

Voor uitgebreide kwaliteitsinformatie kunnen de functies str() en summary() worden gebruikt. Functies worden altijd aangegeven met haakjes waartussen parameters geplaatst kunnen worden. In dit geval is de parameter de dataset firstDF.

## Structuur
str(firstDF[,1:10])
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   45728 obs. of  10 variables:
 $ ID    : int  5 6 12 31 37 39 40 43 54 57 ...
 $ target: int  1 1 0 1 1 1 1 1 1 1 ...
 $ v1    : num  0.944 0.797 0.9 2.26 0.944 ...
 $ v2    : num  5.31 8.3 7.31 14.69 5.93 ...
 $ v3    : chr  "C" "C" "C" "C" ...
 $ v4    : num  4.41 4.23 3.49 5.15 4.4 ...
 $ v5    : num  5.33 11.63 9.95 8.55 9.05 ...
 $ v6    : num  3.98 2.1 1.93 1.95 2.55 ...
 $ v7    : num  3.93 1.99 1.77 2.93 2.69 ...
 $ v8    : num  0.0196 0.1719 0.0663 0.0414 0.0857 ...
## Samenvatting
summary(firstDF[, 1:10])
       ID             target             v1               v2              v3                  v4        
 Min.   :     5   Min.   :0.0000   Min.   : 0.000   Min.   : 0.144   Length:45728       Min.   : 0.128  
 1st Qu.: 57348   1st Qu.:1.0000   1st Qu.: 0.923   1st Qu.: 5.309   Class :character   1st Qu.: 3.475  
 Median :113469   Median :1.0000   Median : 1.476   Median : 7.031   Mode  :character   Median : 4.205  
 Mean   :113929   Mean   :0.7612   Mean   : 1.642   Mean   : 7.480                      Mean   : 4.141  
 3rd Qu.:170713   3rd Qu.:1.0000   3rd Qu.: 2.143   3rd Qu.: 9.479                      3rd Qu.: 4.841  
 Max.   :228712   Max.   :1.0000   Max.   :13.214   Max.   :20.000                      Max.   :11.832  
                                   NA's   :19847    NA's   :19834                       NA's   :19834   
       v5               v6               v7              v8        
 Min.   : 0.182   Min.   : 0.000   Min.   :0.000   Min.   : 0.000  
 1st Qu.: 7.613   1st Qu.: 2.061   1st Qu.:2.102   1st Qu.: 0.086  
 Median : 8.674   Median : 2.410   Median :2.453   Median : 0.389  
 Mean   : 8.741   Mean   : 2.432   Mean   :2.486   Mean   : 1.498  
 3rd Qu.: 9.769   3rd Qu.: 2.772   3rd Qu.:2.838   3rd Qu.: 1.633  
 Max.   :20.000   Max.   :20.000   Max.   :8.889   Max.   :20.000  
 NA's   :19374    NA's   :19847    NA's   :19847   NA's   :19373   

Vraag 1: Wat doen de functies head(), str() en summary()?

Vraag 2: Hoeveel lege waarden bevat de kolom met de variabele v2?

Vraag 3: Pas de functie dim() toe op de dataset. Hoeveel dataregels bevat de dataset? En hoeveel kolommen?

De volgende data komt uit een Driven Data competitie. Deelnemers worden uitgedaagd door Taarifa en het Tanzaniaanse Ministerie voor Water om een model te genereren waarmee voorspeld kan worden welke waterpompen in het land een defect gaan vertonen, zodat ze kunnen worden onderhouden voordat ze daadwerkelijk uitvallen (predictive maintenance).

secDF <- read_csv("https://raw.githubusercontent.com/hanbedrijfskunde/im/master/workshops/bigdata/drivendata.csv")
head(secDF)

Vraag 1: Beoordeel de kwaliteit van de data.

We kunnen de kwaliteit van de data verder verkennen door deze te visualiseren. R biedt verschillende mogelijkheden:

colors <- c("skyblue", "orange", "tomato")
p <- ggplot(secDF) +
  geom_bar(aes(x = region, fill = status_group)) +
  scale_fill_manual(values = colors) +
  coord_flip()
p


ggplotly(p, width = 900)

selDF <- secDF[1:100,]
pal <- colorFactor(colors, domain = c("functional", "functional needs repair", "non functional"))
leaflet(selDF) %>%
  addTiles() %>%
  setView(lng = mean(selDF$longitude), lat = mean(selDF$latitude), zoom = 6) %>%
  addCircleMarkers(~longitude, ~ latitude, popup = ~wpt_name, color = ~pal(status_group))

LS0tCnRpdGxlOiAiV29ya3Nob3AgQmlnIERhdGEgQW5hbHl0aWNzIgphdXRob3I6ICJXaXRlayB0ZW4gSG92ZSIKZGF0ZTogMjktMDEtMjAxOApvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9CiMgY2hlY2sucGFja2FnZXMgZnVuY3Rpb246IGluc3RhbGwgYW5kIGxvYWQgbXVsdGlwbGUgUiBwYWNrYWdlcy4KIyBDaGVjayB0byBzZWUgaWYgcGFja2FnZXMgYXJlIGluc3RhbGxlZC4gSW5zdGFsbCB0aGVtIGlmIHRoZXkgYXJlIG5vdCwgdGhlbiBsb2FkIHRoZW0gaW50byB0aGUgUiBzZXNzaW9uLgpjaGVjay5wYWNrYWdlcyA8LSBmdW5jdGlvbihwa2cpewogICAgbmV3LnBrZyA8LSBwa2dbIShwa2cgJWluJSBpbnN0YWxsZWQucGFja2FnZXMoKVssICJQYWNrYWdlIl0pXQogICAgaWYgKGxlbmd0aChuZXcucGtnKSkgCiAgICAgICAgaW5zdGFsbC5wYWNrYWdlcyhuZXcucGtnLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQogICAgc2FwcGx5KHBrZywgcmVxdWlyZSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQp9CgojIFVzYWdlIGV4YW1wbGUKcGFja2FnZXM8LWMoInRpZHl2ZXJzZSIsICJwbG90bHkiKQpjaGVjay5wYWNrYWdlcyhwYWNrYWdlcykKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KGxlYWZsZXQpCmBgYAoKIyMgRGF0YSBpbmxlemVuCgpEZSBkYXRhIGtvbXQgdWl0IGVlbiA8YSBocmVmPSJodHRwczovL3d3dy5rYWdnbGUuY29tL2MvYm5wLXBhcmliYXMtY2FyZGlmLWNsYWltcy1tYW5hZ2VtZW50IiB0YXJnZXQ9Il9ibGFuayI+S2FnZ2xlIGNvbXBldGl0aWU8L2E+IGVuIGdhYXQgb3ZlciBoZXQgcHJvY2VzIHZhbiBjbGFpbWFmaGFuZGVsaW5nIGJpaiBlZW4gZ3JvdGUgdmVyemVrZXJpbmdzbWFhdHNjaGFwcGlqLiBEZSBvcGRyYWNodCB2YW4gZGUgY29tcGV0aXRpZSB3YXMgb20gZWVuIG1vZGVsIHRlIGJvdXdlbiBkYXQgYmlubmVua29tZW5kZSBjbGFpbXMga2FuIGNhdGVnb3Jpc2VyZW4gbmFhciAnc25lbCBhZmhhbmRlbGJhYXInIGVuICduYWRlcmUgY29udHJvbGUgbm9kaWcnLiBEZSBvb3JzcHJvbmtlbGlqayBkYXRhc2V0IGhhZCBlZW4gb212YW5nIHZhbiAxMTAgTUIgKG1lZXIgZGFuIDEwMC4wMDAgcmVnZWxzKS4gVm9vciBlZW4gc25lbGxlcmUgbGFhZHRpamQgaXMgZGUgZGF0YXNldCBtZXQgNjAlIGdlcmVkdWNlZXJkIChtZXQgYmVob3VkIHZhbiB2ZXJob3VkaW5nZW4pLgoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1UUlVFfQpmaXJzdERGIDwtIHJlYWRfY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaGFuYmVkcmlqZnNrdW5kZS9pbS9tYXN0ZXIvd29ya3Nob3BzL2JpZ2RhdGEva2FnZ2xlLmNzdiIpCmhlYWQoZmlyc3RERikKYGBgCgojIyBLd2FsaXRlaXQgZGF0YSBzZXQgYmVvb3JkZWxlbgoKSW4gYm92ZW5zdGFhbmRlIHRhYmVsIGhlYmJlbiB3ZSBhbCBlZW4ga2xlaW4gYmVldGplIGdla2VrZW4gbmFhciBkZSBrd2FsaXRlaXQgdmFuIGRlIGRhdGEuIFdlIHppZW4gZGF0IGVyIGByIGRpbShmaXJzdERGKVsyXWAga29sb21tZW4gemlqbiBlbiBiaWogaWVkZXJlIGtvbG9tIGlzIGFhbmdlZ2V2ZW4gb20gd2VsayB0eXBlIGRhdGEgaGV0IGdhYXQuIERlIGtvbG9tIG1ldCBkZSB2YXJpYWJlbGUgYHYxYCBpcyBiaWp2b29yYmVlbGQgdmFuIGhldCB0eXBlIGRvdWJsZSAoYGRibGApIGVuIGRpdCBnZWVmdCBhYW4gZGF0IGhldCBvbSBlZW4gZ2V0YWwgbWV0IGRlY2ltYWxlbiBnYWF0LiBLb2xvbSBgdjNgIGJldmF0IHRla3N0IChgY2hyYCkgZW4gIGB0YXJnZXRgIG5hdHV1cmxpamtlIGdldGFsbGVuICh0ZWxnZXRhbGxlbiAtIGBpbnRgKS4KClZvb3IgdWl0Z2VicmVpZGUga3dhbGl0ZWl0c2luZm9ybWF0aWUga3VubmVuIGRlIGZ1bmN0aWVzIGBzdHIoKWAgZW4gYHN1bW1hcnkoKWAgd29yZGVuIGdlYnJ1aWt0LiBGdW5jdGllcyB3b3JkZW4gYWx0aWpkIGFhbmdlZ2V2ZW4gbWV0IGhhYWtqZXMgd2FhcnR1c3NlbiBwYXJhbWV0ZXJzIGdlcGxhYXRzdCBrdW5uZW4gd29yZGVuLiBJbiBkaXQgZ2V2YWwgaXMgZGUgcGFyYW1ldGVyIGRlIGRhdGFzZXQgYGZpcnN0REZgLgoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1UUlVFfQojIyBTdHJ1Y3R1dXIKc3RyKGZpcnN0REZbLDE6MTBdKQpgYGAKCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9VFJVRX0KIyMgU2FtZW52YXR0aW5nCnN1bW1hcnkoZmlyc3RERlssIDE6MTBdKQpgYGAKCjxocj4KKipWcmFhZyAxOioqIFdhdCBkb2VuIGRlIGZ1bmN0aWVzIGBoZWFkKClgLCBgc3RyKClgIGVuIGBzdW1tYXJ5KClgPwoKKipWcmFhZyAyOioqIEhvZXZlZWwgbGVnZSB3YWFyZGVuIGJldmF0IGRlIGtvbG9tIG1ldCBkZSB2YXJpYWJlbGUgYHYyYD8KCioqVnJhYWcgMzoqKiBQYXMgZGUgZnVuY3RpZSBgZGltKClgIHRvZSBvcCBkZSBkYXRhc2V0LiBIb2V2ZWVsIGRhdGFyZWdlbHMgYmV2YXQgZGUgZGF0YXNldD8gRW4gaG9ldmVlbCBrb2xvbW1lbj8KPGhyPgoKRGUgdm9sZ2VuZGUgZGF0YSBrb210IHVpdCBlZW4gPGEgaHJlZj0iaHR0cHM6Ly93d3cuZHJpdmVuZGF0YS5vcmcvY29tcGV0aXRpb25zLzcvcHVtcC1pdC11cC1kYXRhLW1pbmluZy10aGUtd2F0ZXItdGFibGUvcGFnZS8yNS8iIHRhcmdldD0iX2JsYW5rIj5Ecml2ZW4gRGF0YSBjb21wZXRpdGllPC9hPi4gRGVlbG5lbWVycyB3b3JkZW4gdWl0Z2VkYWFnZCBkb29yIDxhIGhyZWY9Imh0dHA6Ly90YWFyaWZhLm9yZy8iIHRhcmdldD0iX2JsYW5rIj5UYWFyaWZhPC9hPiBlbiBoZXQgPGEgaHJlZj0iaHR0cDovL21hamkuZ28udHovIiB0YXJnZXQ9Il9ibGFuayI+VGFuemFuaWFhbnNlIE1pbmlzdGVyaWUgdm9vciBXYXRlcjwvYT4gb20gZWVuIG1vZGVsIHRlIGdlbmVyZXJlbiB3YWFybWVlIHZvb3JzcGVsZCBrYW4gd29yZGVuIHdlbGtlIHdhdGVycG9tcGVuIGluIGhldCBsYW5kIGVlbiBkZWZlY3QgZ2FhbiB2ZXJ0b25lbiwgem9kYXQgemUga3VubmVuIHdvcmRlbiBvbmRlcmhvdWRlbiB2b29yZGF0IHplIGRhYWR3ZXJrZWxpamsgdWl0dmFsbGVuIChwcmVkaWN0aXZlIG1haW50ZW5hbmNlKS4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnNlY0RGIDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaGFuYmVkcmlqZnNrdW5kZS9pbS9tYXN0ZXIvd29ya3Nob3BzL2JpZ2RhdGEvZHJpdmVuZGF0YS5jc3YiKQpoZWFkKHNlY0RGKQpgYGAKPGhyPgoqKlZyYWFnIDE6KiogQmVvb3JkZWVsIGRlIGt3YWxpdGVpdCB2YW4gZGUgZGF0YS4KPGhyPgoKV2Uga3VubmVuIGRlIGt3YWxpdGVpdCB2YW4gZGUgZGF0YSB2ZXJkZXIgdmVya2VubmVuIGRvb3IgZGV6ZSB0ZSB2aXN1YWxpc2VyZW4uIFIgYmllZHQgdmVyc2NoaWxsZW5kZSBtb2dlbGlqa2hlZGVuOgoKLSBlZW52b3VkaWdlIGdyYWZpZWtlbgoKYGBge3J9CmNvbG9ycyA8LSBjKCJza3libHVlIiwgIm9yYW5nZSIsICJ0b21hdG8iKQpwIDwtIGdncGxvdChzZWNERikgKwogIGdlb21fYmFyKGFlcyh4ID0gcmVnaW9uLCBmaWxsID0gc3RhdHVzX2dyb3VwKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbG9ycykgKwogIGNvb3JkX2ZsaXAoKQpwCmBgYAoKPGhyPgotIGdyYWZpZWtlbiBtZXQgaW50ZXJhY3RpZToKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQpnZ3Bsb3RseShwLCB3aWR0aCA9IDkwMCkKYGBgCgo8aHI+Ci0gZ2VvZ3JhcGhpc2NoZSB3ZWVyZ2F2ZSBtZXQgaW50ZXJhY3RpZSAoa2xpayBvcCBlZW4gY2lya2VsIHZvb3IgbWVlciBpbmZvcm1hdGllIHBlciB3YXRlcnB1bnQpCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9MTB9CgpzZWxERiA8LSBzZWNERlsxOjEwMCxdCnBhbCA8LSBjb2xvckZhY3Rvcihjb2xvcnMsIGRvbWFpbiA9IGMoImZ1bmN0aW9uYWwiLCAiZnVuY3Rpb25hbCBuZWVkcyByZXBhaXIiLCAibm9uIGZ1bmN0aW9uYWwiKSkKbGVhZmxldChzZWxERikgJT4lCiAgYWRkVGlsZXMoKSAlPiUKICBzZXRWaWV3KGxuZyA9IG1lYW4oc2VsREYkbG9uZ2l0dWRlKSwgbGF0ID0gbWVhbihzZWxERiRsYXRpdHVkZSksIHpvb20gPSA2KSAlPiUKICBhZGRDaXJjbGVNYXJrZXJzKH5sb25naXR1ZGUsIH4gbGF0aXR1ZGUsIHBvcHVwID0gfndwdF9uYW1lLCBjb2xvciA9IH5wYWwoc3RhdHVzX2dyb3VwKSkKYGBgCgo8aHI+Ci0gZW4gbm9nIHZlZWwgbWVlci4KCiFbXShDYXJzX1RyYXZvbHRhLmdpZikK